<?php

require_once(PASTA_DAO."Usuario.class.php");

class ControlUsuario {
	
	private $objUsuario;
	private $objSessao;
	
	function ControlUsuario(){
		$this->objUsuario = self::getObjUsuario();
		$this->objSessao = self::getObjSessao();
	}

	
	protected function getObjUsuario(){
		if($this->objUsuario == null)
		$this->objUsuario = new Usuario();
		return $this->objUsuario;
	}
	protected function getObjSessao(){
		if($this->objSessao == null)
		$this->objSessao = new ControlSessao();
		return $this->objSessao;
	}

	/**
	 * Função que desloga o usuário logado.
	 */
	public function deslogaUsuario(){
		self::getObjSessao()->dieSessao(SESSAO_SITE);
	}

	/**
	 * Função que faz o login do portal.
	 */
	public function fazLoginPortal($dados){
		$retorno = self::getObjUsuario()->validaUsuarioDB($dados["l"], $dados["s"]);
		if(is_array($retorno)){
			self::getObjSessao()->setUserSessao(SESSAO_SITE, $retorno);
			echo "1";
		}else{
			echo $retorno;
		}
	}
	
	/**
	 * Função que faz o login com o facebook.
	 */
	public function fazLoginFacebook(){
		// Verifica o tipo de requisição e se tem a variável 'code' na url
		if($_SERVER['REQUEST_METHOD'] == 'GET' && isset($_GET['code'])){
			// Informe o id da app
		  	$appId = APP_ID_LOGIN_FB;
		  	// Senha da app
		  	$appSecret = APP_SECRET_LOGIN_FB;
		  	// Url informada no campo "Site URL"
		  	$redirectUri = urlencode(LINK_SITE.'entrar/?fbLogin=1');
		  	// Obtém o código da query string
		  	$code = $_GET['code'];
		 
		  	// Monta a url para obter o token de acesso
		  	$token_url = "https://graph.facebook.com/oauth/access_token?"
		 	. "client_id=" . $appId . "&redirect_uri=" . $redirectUri
			. "&client_secret=" . $appSecret . "&code=" . $code;
		 
		  	// Requisita token de acesso
		  	$response = @file_get_contents($token_url);
		 
		  	if($response){
		    	$params = null;
		    	parse_str($response, $params);
		 
		    	// Se veio o token de acesso
		    	if(isset($params['access_token']) && $params['access_token']){
			      	$graph_url = "https://graph.facebook.com/me?access_token="
			      	. $params['access_token'];
			 
			      	// Obtém dados através do token de acesso
			      	$user = json_decode(file_get_contents($graph_url));
			      
			      	// Se obteve os dados necessários
			      	if(isset($user->email) && $user->email){
			 
				        /*
				        * Autenticação feita com sucesso. 
				        * Loga usuário na sessão.
				        * 
				        * Aqui você pode adicionar um código que cadastra o email do usuário no banco de dados
				        * A cada requisição feita em páginas de área restrita você verifica se o email
				        * que está na sessão é um email cadastrado no banco
				        */
				       return self::utilizaUsuarioFb($user);
			      	}
		 
			    }else{
			      return false;
			      //return 'Falha ao logar no Facebook';
			    }
		 
			}else{
		      	return false;
				//return 'Falha ao logar no Facebook';
		  	}
		 
		}else if($_SERVER['REQUEST_METHOD'] == 'GET' && isset($_GET['error'])){
	      	return false;
			//return 'Permissão não concedida';
		}
	}
	
	/**
	 * verifica e salva se necessário o usuário logado pelo facebook no banco de dados.
	 */
	private function utilizaUsuarioFb($user){
		$retorno = self::getObjUsuario()->verificaUsuarioFb($user->email);
		if(!$retorno){
			$retorno = self::getObjUsuario()->salvaUsuarioFb($user);
		}
		self::getObjSessao()->setUserSessao(SESSAO_SITE, $retorno);
		return true;
	}
	
	
}
?>